package matrix;

/**
 * Интерфейс Ячейки {@linkplain matrix.IRange Области}.
 * <p>Взависимости от правил Игры, Ячейка может дополнятся следующими свойствами:
 * <li> может быть {@linkplain game.ICellCanBeMarked помечена} {@linkplain game.IToken Маркером}
 * <li> может {@linkplain game.ICellCanBeOwnedByPlayer принадлежать} {@linkplain player.IPlayer Игроку}
 * <li> может {@linkplain game.ICellCanHaveValue иметь} некоторое {@linkplain game.IValue Значение} 
 * @see {@literal Фримен Эр., Фримен Эл. - "Паттерны проектирования"}
 */
public interface ICell {
	/**
	 * Возвращает Корневую область, содержащую (хранящую) данную ячейку
	 * @return {@linkplain matrix.IRange IRange}
	 */
////	abstract IRange parent();
	/**
	 * Возвращает номер строки корневой {@linkplain matrix.IRange Области}, содержащей данную ячейку.
	 * Не может быть меньше 1 и больше {@linkplain matrix.IRange#rows() rows()} корневой области 
	 * @return int - номер строки корневой  {@linkplain matrix.IRange Области}
	 * @see matrix.IRange#rows()
	 */
	abstract int row();
	/**
	 * Возвращает номер колонки корневой {@linkplain matrix.IRange Области}, содержащей данную ячейку.
	 * Не может быть меньше 1 и больше {@linkplain matrix.IRange#columns() columns()} корневой области 
	 * @return int - номер колонки корневой области
	 * @see matrix.IRange#columns()
	 */
	abstract int column();
	/**
	 * Заготовка метода сброса состояния Ячейки.
	 */
	abstract void clear();
}
